import store from "../store";
import {CLEAN_REQUEST_TOKEN, VALIDATE, ADD_ROUTE} from "../store/action-type";

const hooks = {
    // 路由跳转取消当前页面请求中的请求
    'cancel_request_token': (to, from, next) => {
        store.commit(CLEAN_REQUEST_TOKEN);
        next();
    },
    'login_permission': async (to, from, next) => {
        // 用户是否需要登录才能访问的标识
        let needLogin = to.matched.some(item => item.meta.needLogin)
        if (!store.state.user.hasPermission) { // token存在，但是vuex数据丢了
            const isLogin = await store.dispatch(`user/${VALIDATE}`);
            if (needLogin) { // 如果需要登录
                if (!isLogin) { // 但是没登录，跳转到登录页面
                    next('/login');
                } else {
                    next();
                }
            } else { // 如果页面不需要登录
                if (to.name === 'login') { // 如果是登录页
                    if (isLogin) { // 但是已经登录了
                        next('/profile');
                    } else {
                        next()
                    }
                } else {
                    next();
                }
            }
        }
        next();
    },
    'menu_permission': async (to, from, next) => {
        //   对目录权限进行处理 动态添加路由
        if (store.state.user.hasPermission) { // 登录过后再拿目录权限
            if (!store.state.user.menuPermission) { // 登录并且没有菜单权限
                await store.dispatch(`user/${ADD_ROUTE}`); // 动态添加路由
                // 组件是异步加载的，等待组件加载完毕后再跳转过去
                next({...to, replace: true}); // 页面重新跳转一次，组件已经加载好了
            } else {
                next();
            }
        } else {
            next();
        }
    }
}

export default hooks